package com.mogujie.tt.utils;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;

public class TestImage {

	/**
	 * 通过拼接的方式构造请求内容，实现参数传输以及文件传输
	 * 
	 * @param url
	 *            Service net address
	 * @param params
	 *            text content
	 * @param files
	 *            pictures
	 * @return String result of Service response
	 * @throws IOException
	 */
	public static String postImg(String url, Map<String, String> params,
			Map<String, File> files) throws IOException {
		String BOUNDARY = java.util.UUID.randomUUID().toString();
		String PREFIX = "--", LINEND = "\r\n";
		String MULTIPART_FROM_DATA = "multipart/form-data";
		String CHARSET = "UTF-8";

		URL uri = new URL(url);
		HttpURLConnection conn = (HttpURLConnection) uri.openConnection();
		conn.setReadTimeout(10 * 1000); // 缓存的最长时间
		conn.setDoInput(true);// 允许输入
		conn.setDoOutput(true);// 允许输出
		conn.setUseCaches(false); // 不允许使用缓存
		conn.setRequestMethod("POST");
		conn.setRequestProperty("connection", "keep-alive");
		conn.setRequestProperty("Charsert", "UTF-8");
		conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA
				+ ";boundary=" + BOUNDARY);

		// 首先组拼文本类型的参数
		StringBuilder sb = new StringBuilder();
		for (Map.Entry<String, String> entry : params.entrySet()) {
			sb.append(PREFIX);
			sb.append(BOUNDARY);
			sb.append(LINEND);
			sb.append("Content-Disposition: form-data; name=\""
					+ entry.getKey() + "\"" + LINEND);
			sb.append("Content-Type: text/plain; charset=" + CHARSET + LINEND);
			sb.append("Content-Transfer-Encoding: 8bit" + LINEND);
			sb.append(LINEND);
			sb.append(entry.getValue());
			sb.append(LINEND);
		}

		DataOutputStream outStream = new DataOutputStream(conn
				.getOutputStream());
		outStream.write(sb.toString().getBytes());
		// 发送文件数据
		if (files != null)
			for (Map.Entry<String, File> file : files.entrySet()) {
				StringBuilder sb1 = new StringBuilder();
				sb1.append(PREFIX);
				sb1.append(BOUNDARY);
				sb1.append(LINEND);
				sb1
						.append("Content-Disposition: form-data; name=\"uploadfile\"; filename=\""
								+ file.getValue().getName() + "\"" + LINEND);
				sb1.append("Content-Type: application/octet-stream; charset="
						+ CHARSET + LINEND);
				sb1.append(LINEND);
				outStream.write(sb1.toString().getBytes());

				InputStream is = new FileInputStream(file.getValue());
				byte[] buffer = new byte[1024];
				int len = 0;
				while ((len = is.read(buffer)) != -1) {
					outStream.write(buffer, 0, len);
				}

				is.close();
				outStream.write(LINEND.getBytes());
			}

		// 请求结束标志
		byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();
		outStream.write(end_data);
		outStream.flush();
		// 得到响应码
		int res = conn.getResponseCode();
		InputStream in = conn.getInputStream();
		StringBuilder sb2 = new StringBuilder();
		if (res == 200) {
			int ch;
			while ((ch = in.read()) != -1) {
				sb2.append((char) ch);
			}
		}
		outStream.close();
		conn.disconnect();
		return sb2.toString();
	}

	/*public static void main(String[] args) {
		*//*final Map<String, String> params = new HashMap<String, String>();

		params.put("feed_id", "50");
		params.put("uid", "20");
		
		

		final Map<String, File> files = new HashMap<String, File>();
		File file1 = new File("D:\\11.jpg");

		File file2 = new File("D:\\22.png");

		files.put("uploadfile1", file1);
		files.put("uploadfile2", file2);

		try {
			//String request = Test.post("http://192.168.10.33:8080/uploadImage/UploadServlet.do",params, files);
			String request = Test.postImg("http://qz.atmart.cn:4025/uploadImage/UploadServlet.do",params, files);
			System.out.print(request);
		} catch (IOException e) {
			e.printStackTrace();
		}
		String t="application/octet-stream; charset=UTF-8";
		System.out.println(t.substring(0, t.indexOf(";")));
		 Calendar cale = Calendar.getInstance();  
		 int hour24 = cale.get(Calendar.HOUR_OF_DAY);   // HOUR-12小时制   
		 System.out.println(hour24);*//*
		
		
		final Map<String, String> params = new HashMap<String, String>();

		params.put("feed_id", "50");
		params.put("uid", "20");
		
		

		final Map<String, File> files = new HashMap<String, File>();
		File file1 = new File("D:\\33.png");

		//File file2 = new File("D:\\22.png");

		files.put("uploadfile1", file1);
		//files.put("uploadfile2", file2);

		try {
			//String request = Test.postImg("http://192.168.10.33:8080/uploadImage/UploadAvatarServlet.do",params, files);
			String request = Test.postImg("http://qz.atmart.cn:4025/uploadImage/UploadAvatarServlet.do",params, files);
			System.out.print(request);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}*/
}
